package com.qixiao.lib.generic.defgeneric.method;

/**
 * 区别泛型方法
 */
public class GenericMethod1 {

    public class Generic<T> {

        private T type;

        public Generic(T type) {
            this.type = type;
        }

        /**
         * 虽然在方法中使用了泛型，但他不是一个泛型方法
         * 这是只是类中的一个普通成员方法，只不过他的返回值是在申明泛型类已申明过的泛型
         * 所以可以在这个方法中继续使用T这个泛型
         * @return
         */
        public T getType() {
            return type;
        }

        /**
         * 类中没有申明E泛型，编译器无法识别
         * @param key
         * @return
         */
//        public E setKey(E key) {
//            return key;
//        }
    }

    /**
     * 不是泛型方法，只是使用 Generic<Number> 做形参而已
     * @param g
     */
    public void show(Generic<Number> g) {
    }

    /**
     * 申明了T 但未申明E 编译不识别E 报错
     * @param g
     * @param <T>
     */
//    public <T> void show1(Generic<E> g) {
//    }

    public <T,E> void show1(Generic<E> g) {
    }

}
